package com.ruoyi.system.xmlAbstract.interfaces.operation;

/**
 * Xml  操作定义接口
 * @author : anxinr
 * @date : 2023/1/16 17:47
 */
public interface XmlOperationInterface {

    /**
     * 断言
     * 当前结点有子节点
     * @return boolean
     */
    boolean hasCurrentNodeChild() ;

    /**
     * 设置当前操作结点
     * 从当前结点的子结点中，通过codeName获取并且设置为当前操作的结点
     * 可以通过索引下标来选择进入那个子结点
     * @param xmlNodeCode
     * @throws Exception
     */
    void setCurrentNodeToChildNodeByNodeName(String xmlNodeCode ,Integer index) throws Exception ;

    /**
     * 添加当前结点的结点参数
     * @param param
     */
    void setCurrentNodeH5Param(String param) ;

    /**
     * 在当前结点生成子结点
     * @param xmlNodeCode
     * @param xmlNodeData
     */
    void generateChildNode(String xmlNodeCode, String xmlNodeData) ;

    /**
     * 在当前结点生成子结点
     * 包含h5 参数
     * @param xmlNodeCode
     * @param xmlNodeData
     * @param param
     */
    void generateChildNode(String xmlNodeCode, String xmlNodeData , String param) ;

    /**
     * 在当前结点生成子结点
     * @param xmlNodeCode
     */
    void generateChildNode(String xmlNodeCode) ;

    /**
     * 生成根结点
     * @return boolean
     * @param xmlNodeCode
     */
    void generateRootNode(String xmlNodeCode);

    /**
     * 切换当前结点到父节点
     * @throws Exception
     */
    void changeCurrentNodeToParentNode() throws Exception;


    /**
     * 设置当前操作结点为根节点
     */
    void setCurrentNodeToRootNode();

    /**
     * 设置当前操作结点
     * 从当前结点的子结点中，通过codeName获取并且设置为当前操作的结点
     * @param xmlNodeCode
     * @throws Exception
     */
    void setCurrentNodeToChildNodeByNodeName(String xmlNodeCode) throws Exception ;

    /**
     * 移除当前结点
     * @throws Exception
     */
    void removeCurrentNode() throws Exception;

    /**
     * 删除当前结点的子结点
     * @param name
     * @throws Exception
     */
    void removeChildNodeByName(String name) throws Exception;
}
